const express = require('express');
const router = express.Router();
const { db } = require('../config/cloudbase');
const { ObjectId } = require('mongodb');
const photoCollection = db.collection('photos');
const userCollection = db.collection('users');

// 获取所有客户的照片（管理员/商家用）
router.get('/photos', async (req, res) => {
  try {
    // 验证用户是否为商家
    if (req.user.role !== 'merchant') {
      return res.status(403).json({ msg: '权限不足，仅限商家访问' });
    }

    const photos = await photoCollection.aggregate([
      { $match: { merchantId: req.user._id } },
      {
        $lookup: {
          from: 'users',
          localField: 'userId',
          foreignField: '_id',
          as: 'user'
        }
      },
      { $unwind: '$user' },
      { $sort: { createdAt: -1 } }
    ]).toArray();

    res.json(photos);
  } catch (error) {
    console.error('获取照片失败:', error);
    res.status(500).json({ msg: '服务器错误' });
  }
});

// 更新照片状态和备注
router.put('/photo/:id', async (req, res) => {
  try {
    // 验证用户是否为商家
    if (req.user.role !== 'merchant') {
      return res.status(403).json({ msg: '权限不足，仅限商家访问' });
    }

    const { id } = req.params;
    const { status, remark } = req.body;
    
    if (!status && !remark) {
      return res.status(400).json({ msg: '请提供状态或备注' });
    }

    // 构建更新对象
    const updateObj = {};
    if (status) updateObj.status = status;
    if (remark !== undefined) updateObj.remark = remark;
    
    const result = await photoCollection.updateOne(
      { _id: ObjectId(id), merchantId: req.user._id },
      { $set: updateObj }
    );

    if (result.modifiedCount === 0) {
      return res.status(404).json({ msg: '照片不存在或无权修改' });
    }

    res.json({ msg: '更新成功' });
  } catch (error) {
    console.error('更新照片失败:', error);
    res.status(500).json({ msg: '服务器错误' });
  }
});

// 获取所有客户（只返回客户角色的用户）
router.get('/customers', async (req, res) => {
  try {
    // 验证用户是否为商家
    if (req.user.role !== 'merchant') {
      return res.status(403).json({ msg: '权限不足，仅限商家访问' });
    }

    // 查询条件：角色为客户
    const customers = await userCollection.find({ role: 'customer' }).toArray();
    
    // 获取每个客户的照片数量
    const customersWithPhotoCount = await Promise.all(customers.map(async (customer) => {
      const photoCount = await photoCollection.countDocuments({ 
        userId: customer._id,
        merchantId: req.user._id
      });
      
      return {
        ...customer,
        photoCount
      };
    }));

    res.json(customersWithPhotoCount);
  } catch (error) {
    console.error('获取客户列表失败:', error);
    res.status(500).json({ msg: '服务器错误' });
  }
});

// 获取特定客户信息
router.get('/customer/:id', async (req, res) => {
  try {
    // 验证用户是否为商家
    if (req.user.role !== 'merchant') {
      return res.status(403).json({ msg: '权限不足，仅限商家访问' });
    }

    const { id } = req.params;
    const customer = await userCollection.findOne({ _id: ObjectId(id), role: 'customer' });
    
    if (!customer) {
      return res.status(404).json({ msg: '客户不存在' });
    }

    res.json(customer);
  } catch (error) {
    console.error('获取客户信息失败:', error);
    res.status(500).json({ msg: '服务器错误' });
  }
});

module.exports = router; 